package CreationPattern.Builder;

import java.util.List;

/**
 * @Classname : PhoneBuilder
 * @Description : 建造者（将高层模块与产品类解耦）
 * 建造者模式（生成器模式）
 * 一、模式定义
 *   Separate the construction or a complex object from its representation So that the Same construction process can create different representations.
 *   （将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。）
 * 二、模式类图
 *   https://kdocs.cn/l/cjoouPD0qd5o
 * 三、适用场景
 *   1、产品含有多个方法，需要调用不同方法或顺序实现不同表示时
 *
 * 四、应用举例
 * @Author : chentianyu
 * @Date 2023/1/22 23:27
 */


// 手机建造者抽象类
public abstract class AbstractPhoneBuilder {

    public abstract void setSequence(List<String> sequence);

    public abstract AbstractPhone getPhone();

}


// 华为手机建造者实体类
class HUAWEIBuilder extends AbstractPhoneBuilder {
    // 注意每个建造者对象只能获得一个对应的产品
    private AbstractPhone phone = new HUAWEI();

    @Override
    public void setSequence(List<String> sequence) {
        this.phone.setSequence(sequence);
    }

    @Override
    public AbstractPhone getPhone() {
        return this.phone;
    }
}


// 小米手机建造者实体类
class XIAOMIBuilder extends AbstractPhoneBuilder {
    // 注意每个建造者对象只能获得一个对应的产品
    private AbstractPhone phone = new XIAOMI();

    @Override
    public void setSequence(List<String> sequence) {
        this.phone.setSequence(sequence);
    }

    @Override
    public AbstractPhone getPhone() {
        return this.phone;
    }
}





